package global

import (
	"time"
)

func initConfig() {
	result := &GlobalConfig{
		ServerConfig: ServerConfig{
			MysqlConfig: MysqlConfig{
				MySQLUser:         "",
				MySQLPwd:          "",
				MySQLAddr:         "",
				MySQLDB:           "",
				MySQLMaxIdleConns: 0,
				MySQLMaxOpenConns: 0,
				MySQLMaxLifetime:  0,
			},
			ServerID:            0,
			SrvType:             0,
			GroupID:             0,
			OthGroupID:          0,
			ConSrvTypeList:      []uint32{},
			WatchSrvTypeList:    []uint32{},
			OthConSrvTypeList:   []uint32{},
			OthWatchSrvTypeList: []uint32{},
			ListenMap:           map[string]*ListenCfg{},
			RedisMap:            map[string]*RedisCfg{},
			FrameDeltaTime:      0,
		},
		Recover:        false,
		EncryptEnabled: false,
		SessTimeout:    10 * time.Second,
		SessTicker:     5 * time.Second,
		EtcdCfg: EtcdCfg{
			Addrs:       []string{},
			DialTimeout: 0,
			LeaseTTL:    0,
		},
	}
	SetCfgInst(result)
}

// 服务器实例配置
type ISrvConfig interface {
	//是否在异常时恢复
	GetRecover() bool
	// 是否开启debug
	GetDebug() bool

	//服务器名字
	GetSrvName() string
	//服务器组ID
	GetGroupID() uint32
	//服务器唯一ID
	GetServerID() uint64
	//服务器类型
	GetSrvType() ServerTypeEnum
	//属性同步用到的服务器类型 场景服务器需要重载这个方法返回 ServerTypeSpace
	GetDefType() ServerTypeEnum

	//服务器每帧的时间
	GetFrameDeltaTime() time.Duration
	//服务器连接超时时间 用于连接过来的sess超时时间
	GetSessTimeout() time.Duration
	//服务器连接心跳时间 用于连接别人的sess心跳时间
	GetSessTicker() time.Duration
}

// 是否在异常时恢复
func (this *GlobalConfig) GetRecover() bool {
	return this.Recover
}

// 是否开启debug
func (this *GlobalConfig) GetDebug() bool {
	return this.Debug
}

// 服务器名字
func (this *GlobalConfig) GetSrvName() string {
	return this.SrvName
}

// 服务器组ID
func (this *GlobalConfig) GetGroupID() uint32 {
	return this.GroupID
}

// 服务器唯一ID
func (this *GlobalConfig) GetServerID() uint64 {
	return this.ServerID
}

// 服务器类型
func (this *GlobalConfig) GetSrvType() ServerTypeEnum {
	return this.SrvType
}

// 属性同步用到的服务器类型
func (this *GlobalConfig) GetDefType() ServerTypeEnum {
	return this.SrvType
}

// 服务器每帧的时间
func (this *GlobalConfig) GetFrameDeltaTime() time.Duration {
	return this.FrameDeltaTime
}

// 服务器连接超时时间 用于连接过来的sess超时时间
func (this *GlobalConfig) GetSessTimeout() time.Duration {
	return this.SessTimeout
}

// 服务器连接心跳时间 用于连接别人的sess心跳时间
func (this *GlobalConfig) GetSessTicker() time.Duration {
	return this.SessTicker
}
